package cn.edu.fzu.homemaking.wallet.mapper;

import cn.edu.fzu.homemaking.wallet.domain.entity.MoneyWater;
import cn.edu.fzu.homemaking.wallet.domain.entity.Wallet;
import cn.edu.fzu.homemaking.wallet.domain.enums.ChargeModeEnum;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface WalletMapper {

    /** 初始化钱包 **/
    void insert(@Param("userId") Long userId);


    /** 创建临时表 **/
    void createTemplate(@Param("tableName") String tableName);


    /** 删除临时表 **/
    void dropTemplate(@Param("tableName") String tableName);


    /** 初始化：往临时表插入数据 **/
    void initTemplate(@Param("tableName") String tableName, @Param("userId") Long userId, @Param("count") Integer count,
                      @Param("id") Long id);


    Long getMinIdFromTemplate(@Param("tableName") String tableName);


    /** 根据用户查询钱包 **/
    Wallet getByUserId(@Param("userId") Long userId);


    /** 更新余额 **/
    void updateMoney(@Param("userId") Long userId, @Param("money") BigDecimal money);


    /** 新增转账流水 **/
    void insertWater(@Param("userId") Long userId, @Param("relateId") Long relateId,
                     @Param("relateName") String relateName, @Param("surplus") BigDecimal surplus,
                     @Param("money") BigDecimal money, @Param("chargeMode") ChargeModeEnum chargeMode,
                     @Param("description") String description);


    /** 新增转账流水到流水表 **/
    void insertWaterTemplate(@Param("tableName") String tableName, @Param("relateId") Long relateId,
                             @Param("relateName") String relateName, @Param("surplus") BigDecimal surplus,
                             @Param("money") BigDecimal money, @Param("chargeMode") ChargeModeEnum chargeMode,
                             @Param("description") String description);


    /** 查询转账流水 **/
    List<MoneyWater> listWaterTemplate(@Param("tableName") String tableName,
                                       @Param("chargeMode") ChargeModeEnum chargeMode);


    /** 查看流水详情 **/
    MoneyWater getWaterTemplateById(@Param("tableName") String tableName, @Param("id") Long id);


    boolean tableExist(@Param("tableName") String tableName);
}
